﻿using System;
using System.Collections.Generic;
using System.Windows.Forms;
using Flowers;
using Logic;

namespace _2_Лабраторная
{
    //partial - для компилятора, чтобы он знал что есть части этого класса в другом файле
    public partial class Form1 : Form
    {
        List<AbstractFlowers> Bouquet = new List<AbstractFlowers>();
        Creator creator;
        //вывод списка
        public void ListOut()
        {
            int counter = 1;
            listBox1.Items.Clear();
            if (Bouquet.Count!=0)
            {
                listBox1.Items.Add("Список");
                foreach (AbstractFlowers flower in Bouquet)
                {
                    listBox1.Items.Add(counter+") "+flower.Name);
                    counter++;
                }
            }
            else
                listBox1.Items.Add("список пуст");
        }

        //конструктор формы
        public Form1()
        {
            //метод поддержки конструктора
            InitializeComponent();
            Factory factory = new Factory();
            Bouquet = factory.CreateBouquet();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            ListOut();
            error.Visible = false;
        }

        //выход
        private void button1_Click(object sender, EventArgs e)
        {
            System.Environment.Exit(0);
        }

        //Добавить элемент
        private void Add_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            int price = 0;
            try
            {
                price = Convert.ToInt32(textBox1.Text);
                if ((price > 0) && (price <= 1000))
                {
                    switch (comboBox1.SelectedItem.ToString())
                    {
                        case "Роза":
                            creator = new RoseCreator();
                            Bouquet.Add(creator.FactoryMethod(price));
                            listBox1.Items.Add("Добавлена Роза");
                            break;
                        case "Тюльпан":
                            creator = new TulipCreator();
                            Bouquet.Add(creator.FactoryMethod(price));
                            listBox1.Items.Add("Добавлен Тюльпан");
                            break;
                        case "Ромашка":
                            creator = new CamomileCreator();
                            Bouquet.Add(creator.FactoryMethod(price));
                            listBox1.Items.Add("Добавлена Ромашка");
                            break;
                    }
                }
                else
                {
                    error.Visible = true;
                    error.Text = "Укажите стоимость в пределах от 1 до 1000";
                }
            }
            catch (FormatException)
            {
                error.Visible = true;
                error.Text = "некорректный ввод";
            }
            catch (Exception)
            {
                listBox1.Items.Clear();
                listBox1.Items.Add("Выберите элемент для добавления и укажите цену");
            }
        }

        //Очистка списка
        private void Clear_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            listBox1.Items.Add("список очищен");
            Bouquet.Clear();
        }

        //Вывод списка
        private void Out_Click(object sender, EventArgs e)
        {
            ListOut();
        }

        private void CountNumber_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            listBox1.Items.Add("Количество элементов в списке: "+Bouquet.Count);
        }

        private void Count_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            listBox1.Items.Add("Общая стоимость букета:");
            Counter counter = new Counter();
            listBox1.Items.Add(counter.Count(Bouquet));
        }

        private void button4_Click(object sender, EventArgs e)
        {
            int index;
            listBox1.Items.Clear();
            try
            {
                index = Convert.ToInt32(textBox1.Text);
                if (Bouquet.Count!=0)
                {
                    if ((0 < index) && (index <= Bouquet.Count))
                    {
                        listBox1.Items.Add("Удален элемент под номером: " + index);
                        Bouquet.RemoveAt(index-1);

                    }
                    else
                    {
                        error.Visible = true;
                        if (Bouquet.Count != 0)
                        {
                            error.Text = "Укажите индекс в пределах от 1 до " + Bouquet.Count;
                        }
                    }
                }
                else
                {
                    error.Visible = true;
                    error.Text = "Список пуст, нет элементов для удаления";
                }
            }
            catch (FormatException)
            {
                error.Visible = true;
                error.Text = "некорректный ввод";
            }
            catch (Exception)
            {
                listBox1.Items.Clear();
                listBox1.Items.Add("Выберите номер элемента для удаления");
            }
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            error.Visible = false;
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {

        }
    }
}
